﻿using System.Collections.Generic;
using System.Data;
using System;

namespace Gestión_UTN.blimpl
{
    public class inscripcionExamenblimpl : bl.inscripcionExamenbl
    {
        private static Gestión_UTN.da.inscripcionExamenda createInscripcionExamen = Gestión_UTN.factories.dafactory.createInscripcionExamen();
        private static Gestión_UTN.bl.alumnobl createAlumno = Gestión_UTN.factories.blfactory.createAlumno();
        private static Gestión_UTN.bl.fechaExamenbl createFechaExamen = Gestión_UTN.factories.blfactory.createFechaExamen();

        public bool SaveInscripcionExamen(int alu_dni, int fe_id)
        {
            bool ingresada = false;

            try
            {
                ingresada = (0 != alu_dni && 0 != fe_id)
                    ? createInscripcionExamen.SaveInscripcionExamen(alu_dni, fe_id)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return ingresada;
        }

        public bool DeleteInscripcionExamen(int alu_dni, int fe_id)
        {
            bool eliminada = false;

            try
            {
                eliminada = (0 != alu_dni && 0 != fe_id)
                    ? createInscripcionExamen.DeleteInscripcionExamen(alu_dni, fe_id)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return eliminada;
        }

        public bool ModifyInscripcionExamen(int alu_dni_anterior, int fe_id_anterior, int alu_dni, int fe_id)
        {
            bool modificada = false;

            try
            {
                modificada = (0 != alu_dni_anterior && 0 != fe_id_anterior && 0 != alu_dni && 0 != fe_id)
                    ? createInscripcionExamen.ModifyInscripcionExamen(alu_dni_anterior, fe_id_anterior, alu_dni, fe_id)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return modificada;
        }

        public System.Data.DataTable FindAllInscripcionExamen()
        {
            DataTable inscripciones = null;

            try
            {
                inscripciones = createInscripcionExamen.FindAllInscripcionExamen();
            }
            catch (exceptions.daexception ex)
            {
                inscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                inscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }

            return inscripciones;
        }

        public bo.InscripcionExamenAlumnobo FindInscripcionByDNI(int alu_dni)
        {
            bo.InscripcionExamenAlumnobo inscripcionesAlumnos = null;

            try
            {
                List<Entities.InscripcionExamen> inscs = (0 != alu_dni)
                    ? createInscripcionExamen.FindInscripcionByDNI(alu_dni)
                    : null;

                if (null != inscs)
                {
                    List<bo.FechaExamenbo> fechas = new List<bo.FechaExamenbo>();
                    inscripcionesAlumnos = new bo.InscripcionExamenAlumnobo();

                    foreach (var insc in inscs)
                    {
                        bo.FechaExamenbo fec = createFechaExamen.FindExamenbyId(insc.Fe_id);

                        fechas.Add(fec);

                        fec = null;
                    }

                    inscripcionesAlumnos.Alumno = createAlumno.FindAlumnoByDNI(alu_dni);

                    inscripcionesAlumnos.Fechas = fechas;
                }
            }
            catch (exceptions.daexception ex)
            {
                inscripcionesAlumnos = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                inscripcionesAlumnos = null;
                throw new exceptions.blexception(ex.Message);
            }

            return inscripcionesAlumnos;
        }

        public bo.InscripcionExamenFechasbo FindInscripcionByFecha(int fe_id)
        {
            bo.InscripcionExamenFechasbo inscripcionesFechas = null;

            try
            {
                List<Entities.InscripcionExamen> inscs = (0 != fe_id)
                    ? createInscripcionExamen.FindInscripcionByFecha(fe_id)
                    : null;

                if (null != inscs)
                {
                    List<bo.Alumnobo> alumnos = new List<bo.Alumnobo>();
                    inscripcionesFechas = new bo.InscripcionExamenFechasbo();

                    foreach (var insc in inscs)
                    {
                        bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(insc.Alu_dni);

                        alumnos.Add(alu);

                        alu = null;
                    }

                    inscripcionesFechas.Alumnos = alumnos;

                    inscripcionesFechas.Fecha = createFechaExamen.FindExamenbyId(fe_id);
                }
            }
            catch (exceptions.daexception ex)
            {
                inscripcionesFechas = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                inscripcionesFechas = null;
                throw new exceptions.blexception(ex.Message);
            }

            return inscripcionesFechas;
        }
    }
}
